<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明

    有興趣的話可以看看這篇文章,下邊gg_shily朋友和我的一些討論,在gg_shily的激發下,我決定仔細研究一下這個問題,在我的很多文章中都用過的字節碼,我想在這里也能幫助我 。下邊是分析的結果,為了方便觀看,我把里邊的兩個類稍微變動一下
    ?1package?ov;
    ?2
    ?3public?class?Child?extends?Parent?{
    ?4
    ?5????public?void?run(Object?o)?{
    ?6????????System.out.println("?in?Child?+param:Object?");
    ?7????}

    ?8
    ?9????public?void?run(String?str)?{
    10????????System.out.println("?in?Child?+?param:String?");
    11????}

    12
    13????public?static?void?main(String[]?args)?{
    14????????
    15????????String?str?=?new?String();
    16????????Parent?p?=?new?Child();
    17????????test(p,str);
    18????}

    19????public?static?void?test(Parent?p,String?str){
    20????????p.run(str);
    21????}

    22}
    然后編譯,反編譯得到字節碼如下:(得到字節碼的方法見這里
    public?class?ov.Child?extends?ov.Parent{
    public?ov.Child();
    ??Code:
    ???
    0:???aload_0
    ???
    1:???invokespecial???#8;?//Method?ov/Parent."<init>":()V
    ???4:???return

    public?void?run(java.lang.Object);
    ??Code:
    ???
    0:???getstatic???????#16;?//Field?java/lang/System.out:Ljava/io/PrintStream;
    ???3:???ldc?????#22;?//String??in?Child?+param:Object
    ???5:???invokevirtual???#24;?//Method?java/io/PrintStream.println:(Ljava/lang/St
    ring;)V
    ???
    8:???return

    public?void?run(java.lang.String);
    ??Code:
    ???
    0:???getstatic???????#16;?//Field?java/lang/System.out:Ljava/io/PrintStream;
    ???3:???ldc?????#32;?//String??in?Child?+?param:String
    ???5:???invokevirtual???#24;?//Method?java/io/PrintStream.println:(Ljava/lang/St
    ring;)V
    ???
    8:???return

    public?static?void?main(java.lang.String[]);
    ??Code:
    ???
    0:???new?????#38;?//class?java/lang/String
    ???3:???dup
    ???
    4:???invokespecial???#40;?//Method?java/lang/String."<init>":()V
    ???7:???astore_1
    ???
    8:???new?????#1;?//class?ov/Child
    ???11:??dup
    ???
    12:??invokespecial???#41;?//Method?"<init>":()V
    ???15:??astore_2
    ???
    16:??aload_2
    ???
    17:??aload_1
    ???
    18:??invokestatic????#42;?//Method?test:(Lov/Parent;Ljava/lang/String;)V
    ???21:??return

    public?static?void?test(ov.Parent,?java.lang.String);
    ??Code:
    ???
    0:???aload_0
    ???
    1:???aload_1
    ???
    2:???invokevirtual???#50;?//Method?ov/Parent.run:(Ljava/lang/String;)V
    ???5:???return

    }
    可以看到調用的是Parent.run(String)這樣說明在編譯期間,因為重載就決定了Parent.run(String)
    然后到運行期,會向下轉型到Child.run(String)

    posted on 2006-12-20 00:32 dreamstone 閱讀(2607) 評論(3)  編輯  收藏 所屬分類: jdk相關

    評論

    # re: 對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明 2006-12-20 20:43 gg_shily

    不好意思,我白天用不了msn,周末的時候才能用,我的msn是GG_sHiLy@hotmail.com,加你了,你這么說我覺得就很明白了,呵呵  回復  更多評論   

    # re: 對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明 2007-02-18 01:39 喜來了

    對Java中, 怎樣從一個方法調用instance.foo(args) ,找到實際調用的函數, 在Core Java里有很詳細的描述, 簡單講, 每個Class會保存一個方法調用表, 根據instance的具體值和方法的signature尋找。 順帶的, Core Java里還詳細講述了Java Compiler和Java解釋器是怎樣從一個類名找到一個具體的類文件位置。

    其實所謂的Polymorphy也好, Overloading也好都是對Java Compiler和解釋器內部算法的抽象。如果有人需要Core Java的電子書,我這有,發封信給我。也可以從這個站上下http://www.tkk7.com/xilaile/archive/2007/02/16/100022.aspx
    很多關于計算機的書  回復  更多評論   

    # re: 對(重載overloading和覆寫overriding哪個更早執行-- visitor幫助篇)這篇文章的說明 2007-06-21 13:18 s

    我要Core Java的電子書謝謝 shangcom2006@163.com  回復  更多評論   

    主站蜘蛛池模板: 成年女人永久免费观看片| 天堂在线免费观看中文版| 久久久久久久亚洲精品| 一级毛片免费在线| 亚洲欧洲精品成人久久奇米网| 亚洲av永久无码精品秋霞电影秋| 免费电视剧在线观看| 亚洲精品9999久久久久无码| 色吊丝永久在线观看最新免费| 亚洲欧美在线x视频| 亚洲黄片手机免费观看| 91国内免费在线视频| 亚洲av无码av制服另类专区| 91福利免费视频| 亚洲综合色7777情网站777| 好爽又高潮了毛片免费下载| 色视频在线观看免费| 国产亚洲精品激情都市| 久久精品国产免费一区| 亚洲黄色在线电影| 成人免费777777| 国内精品99亚洲免费高清| 亚洲视频一区网站| 免费在线观看日韩| 怡红院免费的全部视频| 亚洲国产片在线观看| 亚洲av中文无码| 麻豆成人久久精品二区三区免费| 亚洲中文无码永久免费| 亚洲最大激情中文字幕| 午夜免费1000部| 日韩在线观看免费完整版视频| 久久精品国产亚洲AV电影| 男女交性永久免费视频播放| AAAAA级少妇高潮大片免费看| 亚洲综合在线视频| 又粗又硬又黄又爽的免费视频| 国产一区二区三区免费| 在线观看亚洲专区| 亚洲色成人网一二三区| 亚洲国产精品日韩专区AV|